// 应用配置文件
// 该文件包含应用的所有配置信息，支持通过环境变量覆盖默认配置

// 加载环境变量
require('dotenv').config();

/**
 * 应用配置对象
 * @namespace config
 */
module.exports = {
  /**
   * JWT密钥配置
   * 用于签名和验证JWT令牌
   * 生产环境中应该使用环境变量，避免将密钥硬编码在代码中
   * @type {string}
   * @memberof config
   */
  jwtSecretKey: process.env.JWT_SECRET_KEY || 'gaochong_api_server_secret_key_2025',
  
  /**
   * JWT配置
   * @type {Object}
   * @memberof config
   */
  jwt: {
    /**
     * JWT过期时间
     * @type {string}
     */
    expiresIn: process.env.JWT_EXPIRES_IN || '24h',
    
    /**
     * JWT签发者
     * @type {string}
     */
    issuer: 'api-server',
    
    /**
     * JWT算法
     * @type {string}
     */
    algorithm: 'HS256'
  },
  
  /**
   * 数据库配置
   * 支持通过环境变量配置数据库连接信息
   * @type {Object}
   * @memberof config
   */
  database: {
    /**
     * 数据库主机地址
     * @type {string}
     */
    host: process.env.DB_HOST || '192.168.1.45',
    
    /**
     * 数据库端口
     * @type {number}
     */
    port: parseInt(process.env.DB_PORT) || 5432,
    
    /**
     * 数据库名称
     * @type {string}
     */
    name: process.env.DB_NAME || 'ERP',
    
    /**
     * 数据库用户名
     * @type {string}
     */
    user: process.env.DB_USER || 'postgres',
    
    /**
     * 数据库密码
     * @type {string}
     */
    password: process.env.DB_PASSWORD || 'gaochong',
    
    /**
     * 数据库方言
     * @type {string}
     */
    dialect: 'postgres'
  },
  
  /**
   * 数据库同步配置
   * 控制是否在应用启动时同步数据库模型
   * @type {Object}
   * @memberof config
   */
  databaseSync: {
    /**
     * 是否启用数据库同步
     * 在开发环境中可以设置为true以自动同步模型
     * 生产环境中建议设置为false
     * @type {boolean}
     */
    enabled: process.env.SYNC_DATABASE === 'true' || false,
    
    /**
     * 是否允许强制同步（会删除并重新创建表）
     * 仅在开发环境中有效，生产环境中应始终为false
     * @type {boolean}
     */
    allowForceSync: process.env.ALLOW_FORCE_SYNC === 'true' || false,
    
    /**
     * 是否自动清理已删除模型对应的数据库表
     * 仅在开发环境中有效，生产环境中应始终为false
     * @type {boolean}
     */
    autoCleanupDeletedTables: process.env.AUTO_CLEANUP_DELETED_TABLES === 'true' || false
  },
  
  /**
   * 分页配置
   * @type {Object}
   * @memberof config
   */
  pagination: {
    /**
     * 默认每页条数
     * @type {number}
     */
    defaultPageSize: 10,
    
    /**
     * 每页最大条数
     * @type {number}
     */
    maxPageSize: 100
  },
  
  /**
   * 安全配置
   * @type {Object}
   * @memberof config
   */
  security: {
    /**
     * 密码加密的盐值轮数
     * 数值越高安全性越高，但加密时间越长
     * @type {number}
     */
    saltRounds: 10
  }
};